package com.java.enums.sample03;

import java.awt.Color;

/**
 * 所有的枚举都继承自java.lang.Enum类。
 * 由于Java 不支持多继承，所以枚举对象不能再继承其他类。
 * 
 * 枚举不能使用abstract 修饰
 */
public enum ColorEnum {
	//若枚举常量具有注解T，T具有元注解m,m对应annotation.Target，
	//则m必须具有一个值为ElementType.FIELD的元素，否则编译出错。
	@MyAnnotation
	RED(255, 0, 0) {	
		@Override
		public void doSomeThing() {
			System.out.println("枚举常量的名称："+name());
		}
	},
	GREEN(0, 255, 0) {
		@Override
		public void doSomeThing() {
			System.out.println("枚举常量的名称："+name());
		}
		@Override
		public void met(){
			System.out.println("重写了ColorEnum.met();");
		}
	},
	BLUE(0, 0, 255) {
		@Override
		public void doSomeThing() {
			System.out.println("枚举常量的名称："+name());
		}
	};
	
	static{
		System.out.println("静态代码块！");
	}
	
	private Color color;

	//构造函数一定要是 private 或 friendly 的
	private ColorEnum(int r, int g, int b) {
		this.color = new Color(r, g, b);;
		System.out.println(color+" 枚举常量被实例化！");
	}
	public Color getColor() {
		return color;
	}

	//每添加一个新的枚举常量，都必须实现该方法，否则会编译出错。
	//避免了在使用SWITCH语句时忘记添加新常量的可能。
	abstract void doSomeThing();
	
	public void met(){}
}
